A file system takes ownership of the storage space of a volume or hard disk and uses the storage space to store files, directories, and other file system objects. An application can access file system objects by making a system call through the operating system of the computing device on which the file system resides. Most file systems support a standard set of system calls, such as open, read, and write, that can be used to perform operations on a file.
A file system maintains at least one namespace for file system objects. A namespace is a set or group of names that is defined according to some naming convention. A flat namespace uses a single, unique name for every file system object. For example, a small Windows (NetBIOS) network requires a different name to be assigned to each computer and printer which appear as files in a flat namespace. File system objects within the namespace can be accessed by applications.
In order to provide increased bandwidth when accessing files within the name space and/or to provide increased file system availability, a file system can be implemented on multiple independent computing devices, called nodes, that cooperate to provide a unified namespace. An arrangement of multiple nodes, each of which executes an instance of the file system, that cooperate to provide a unified namespace is referred to herein as a distributed file system. A common example of such a distributed file system is a clustered file system. In a clustered file system, software on each node controls the behavior of each node such that, from the perspective of a client, all of the nodes within the cluster appear to be a single entity.
Many techniques that can be used within non-distributed file systems will not work properly within a distributed file system. For example, a file system can maintain a file change log in order to track which files within the namespace have changed during a given interval. If each node within a distributed file system attempts to maintain a file change log according to techniques developed for non-distributed file systems, the resulting file change logs may not be useable, since there is no way to order entries created on each different node relative to each other. Accordingly, techniques for implementing a file change log in a distributed file system are desirable.